package com.group3.service;

import com.group3.common.result.ApiResponse;
import com.group3.model.Product;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
@Service
public class ProductService {

    // 模拟数据库的商品列表
    private static List<Product> productList = new CopyOnWriteArrayList<>();

    // 初始化一些测试数据
    static {
        productList.add(new Product(1, "手机", 2999.0, 100,1));
        productList.add(new Product(2, "电脑", 8999.0, 50,1));
        productList.add(new Product(3, "耳机", 299.0, 200,1));
         productList.add(new Product(4, "鼠标", 49.0, 300,1));
          productList.add(new Product(5, "键盘", 49.0, 300,1));
           productList.add(new Product(6, "鼠标垫", 9.0, 500,1));
            productList.add(new Product(7, "游戏主机", 4999.0, 100,1));
             productList.add(new Product(8, "游戏耳机", 99.0, 100,1));
             productList.add(new Product(9, "游戏手柄", 99.0, 100,1));
             productList.add(new Product(10, "游戏周边1", 99.0, 100,1));
             productList.add(new Product(11, "游戏周边2", 99.0, 100,1));
             productList.add(new Product(12, "游戏周边3", 99.0, 100,1));
             productList.add(new Product(13, "游戏周边4", 99.0, 100,1));
             productList.add(new Product(103, "游戏周边4", 9.9, 10,1));
    }

    // 查询所有商品（仅上架）
    public List<Product> getAllProducts() {
        return productList.stream()
                .filter(product -> product.getStatus() == 1)
                .collect(Collectors.toList());
    }

    // 根据商品ID查询商品（仅上架）
    public Optional<Product> getProductById(Integer pid) {
        return productList.stream()
                .filter(product -> product.getPid().equals(pid) && product.getStatus() == 1)
                .findFirst();
    }

    // 更新商品状态
    public boolean updateProductStatus(Integer pid, Integer status) {
        return getProductById(pid).map(product -> {
            product.setStatus(status);
            return true;
        }).orElse(false);
    }

    // 新增商品
    public void addProduct(Product product) {
        productList.add(product);
    }

    // 更新商品信息
    public boolean updateProduct(Integer pid, Product updatedProduct) {
        return getProductById(pid).map(product -> {
            int index = productList.indexOf(product);
            if (index != -1) {
                productList.set(index, updatedProduct);
                return true;
            }
            return false;
        }).orElse(false);
    }

    // 删除商品
    public boolean deleteProduct(Integer pid) {
        return productList.removeIf(product -> product.getPid().equals(pid));
    }

    // 扣减库存

    public synchronized boolean decreaseStock(Integer pid, Integer number) {

        return getProductById(pid).map(product -> {
            if (product.getStock() >= number) {
                product.setStock(product.getStock() - number);
                return true;
            }
            return false;
        }).orElse(false);
    }

    // 恢复库存
    public synchronized boolean increaseStock(Integer pid, Integer number) {
        return getProductById(pid).map(product -> {
            product.setStock(product.getStock() + number);
            return true;
        }).orElse(false);
    }

    // 预扣库存（用于秒杀场景，暂时扣减库存，订单确认后正式扣减）
    public boolean preDecreaseStock(Integer pid, Integer number) {
        return getProductById(pid).map(product -> {
            if (product.getStock() >= number) {
                product.setStock(product.getStock() - number); // 预扣减直接操作库存（实际应使用Redis暂存）
                return true;
            }
            return false;
        }).orElse(false);
    }

    public List<Product> getProductsByPids(List<Integer> pids) {
        List<Product> products = productList.stream()
                .filter(product -> pids.contains(product.getPid()))
                .collect(Collectors.toList());
        return  products;
    }
}
